﻿using System;
using System.Windows.Forms;
using Entidades;
using Logica;
using Logica.Comandos.AseguradoraCommand;
using Logica.Comandos.Cliente;
using Logica.Comandos.Poliza;
using Logica.Comandos.Ramo;
using SchadenEscritorio.Contratos;

namespace SchadenEscritorio.Presentadores
{
    public class PresentadorAgregarCliente
    {
        #region Atributos

        private readonly IContratoAgregarCliente _vista;

        #endregion

        #region Constructor

        public PresentadorAgregarCliente( IContratoAgregarCliente vista)
        {
            _vista = vista;
        }
        #endregion

        #region Metodos
        /// <summary>
        /// Metodo que carga los datos de las aseguradoras en el combobox
        /// </summary>
        private void CargarAseguradoras()
        {
            Comando comando = FComandos.ComandoAseguradora().ConsultarTodos();
            
            foreach (Aseguradora aseguradora in ((ComandoObtenerTodasAseguradoras) comando).Ejecutar("") )
            {
                _vista.Aseguradora.Items.Add(aseguradora);
            }
            _vista.Aseguradora.DisplayMember = "Nombre";
            _vista.Aseguradora.ValueMember = "Id";
        }

        /// <summary>
        /// llena el combobox de los ramos
        /// </summary>
        private void CargarRamos()
        {
            Comando comando = FComandos.ComandoRamo().ConsultarTodos();

            _vista.Ramo.Items.Clear();

            foreach (Ramo ramo in ((ComandoObtenerRamos)comando).Ejecutar(""))
            {
                _vista.Ramo.Items.Add(ramo);
            }
            _vista.Ramo.DisplayMember = "Nombre";
            _vista.Ramo.ValueMember = "Id";
        }

        /// <summary>
        /// metodo que inicializa los componentes
        /// </summary>
        public void Cargar()
        {
            CargarAseguradoras();
            CargarRamos();
            _vista.LetraRif.Items.Clear();
            _vista.LetraRif.Items.Add('V');
            _vista.LetraRif.Items.Add('E');
            _vista.LetraRif.Items.Add('J');
            _vista.LetraRif.Items.Add('P');
            _vista.LetraRif.Items.Add('G');

            _vista.LetraRif.SelectedIndex = 0;
        }

        /// <summary>
        /// metodo que toma los valores del formulario y los almacena
        /// </summary>
        public void Guardar()
        {
            Cliente miCliente = FabricaEntidades.ObtenerCliente();
            Poliza poliza = FabricaEntidades.ObtenerPoliza();
            Comando comando = FComandos.ComandoCliente().Agregar();

            miCliente.Rif = Convert.ToInt64(_vista.Rif.Text);
            miCliente.LetraRif = Convert.ToChar(_vista.LetraRif.SelectedItem);
            miCliente.Nombre = _vista.Nombre.Text;
            miCliente.Telefono = _vista.Telefono.Text;
            miCliente.Telefono1 = _vista.Telefono1.Text;
            miCliente.Telefono2 = _vista.Telefono2.Text;
            miCliente.Id = ((ComandoAgregarCliente) comando).Ejecutar(miCliente);

            comando = FComandos.ComandoPoliza().Agregar();
            poliza.Aseguradora = (Aseguradora)_vista.Aseguradora.SelectedItem;
            poliza.Cliente = miCliente;
            poliza.Numero = _vista.NumeroPoliza.Text;
            poliza.Ramo = (Ramo)_vista.Ramo.SelectedItem;
            ((ComandoAgregarPoliza) comando).Ejecutar(poliza);
            DialogResult result =
                MessageBox.Show("Asegurado Agregado Con Exito!!", "OJO", MessageBoxButtons.OK);
            Principal principal = new Principal();
            _vista.MiVentana.Close();
            principal.Show();
            
        }
        #endregion
    }
}
